#ifndef VIDSTREAM_H
#define VIDSTREAM_H

//Библиотека Qt.
#include <QThread>
#include <QMutex>
#include <QVariant>
#include <QPointer>


//Внутренняя библиотека.
#include "vidfilter.h"
#include "params.h"


//Объявление внешних классов.
class VidFrame;


class VidStream : public QThread
{
	Q_OBJECT
signals:
	void information(const QString &msg);
	void warning(const QString &msg);
	void critical(const QString &msg);

public:
	//Конструктор.
	VidStream(int index, QObject *parent = NULL);

	//Деструктор.
	virtual ~VidStream() {}

	//Функция отправки видеокадра в поток.
	void sendFrame(VidFrame *vidframe);

	//Функция возврата параметра потока.
	bool getParam(DevParam::GET_PARAM param, QVariant *value);

public slots:
	//Слот установки параметра потока.
	void slotSetParam(DevParam::SET_PARAM param, int value);

	//Слот установки параметра потока.
	void slotSetParam(DevParam::SET_PARAM param, bool value);

	//Слот установки параметра потока.
	void slotSetParam(DevParam::SET_PARAM param, QObject *object);

protected:
	QMutex mutex;

	//Функция активации нити.
	virtual void run();

private:
	int streamIndex;

	//Указатель на видеокадр.
	VidFrame *vidFrame;

	//Список фильтров.
	QList<VidFilter *> filtersList;

	//Безопасный указатель на видеоокно.
	QPointer<QObject> vidWin;

	//Функция возврата фильтра от его типа.
	VidFilter *getFilter(VidFilter::TYPE type);

};

#endif
